// const { result } = require("lodash")

// var a = 2
// function add(b,c){
//   return b+c
// }
// function addAll(b,c){
// var d = 10
// result = add(b,c)
// console.log(result);
// return  a+result+d
// }

// addAll(5,6);

// 因为js会为每个函数创建一个上下文，将其压入调用栈内（后进先出） 所以递归可能会造成栈溢出 
function runStack (n) {
    if (n === 0) return 100;
    return runStack( n- 2);
  }
  // ---> 优化  
  function improveRunStack(n){
     while(true){
        if(n===0) return 100;
        if(n===1) return 200;
  
         n=n-2;
     }
  }
  function letTest() {
    let x = 1;
    if (true) {
      let x = 2;  // 不同的变量
      console.log(x);  // 2
    }
    console.log(x);  // 1
  }
  // letTest();
  
   function foo() {
    var myName = "极客时间"
    let test1 = 1
    const test2 = 2
    var innerBar = {
        getName:function(){
            console.log(test1)
            return myName
        },
        setName:function(newName){
            myName = newName
        }
    }
    return innerBar
}
// var bar = foo();
// bar.getName();
// bar.setName();
// console.log(bar.getName());
function fun(n,o){
 console.log(n,o);

 return {
   fun: function(m){
      return fun(m,n);
   }
 }
}


const a = fun(1);
a.fun(2).fun(3).fun(4);


